package cc.linker.steplink.crm.dao;

import cc.linker.steplink.crm.domain.Label;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Set;

public interface AutoMarkLabelDao {
    /**
     * 根据类型查询标签
     * @param labelType
     * @return
     */
    List<Label> listLabelsByType(Integer labelType);

    /**
     * 根据类型和一级分类查询标签
     * @param labelType
     * @param labelKind
     * @return
     */
    List<Label> listLabelsByTypeAndKind(@Param("labelType") Integer labelType, @Param("labelKind") Integer labelKind);

    /**
     * 查询对话/访问次数匹配的用户id
     * @param actionType
     * @param minValue
     * @param maxValue
     * @param orgId
     * @return
     */
    List<String> listCustomerIdByType(@Param("actionType") Integer actionType, @Param("minValue") String minValue,
                                      @Param("maxValue") String maxValue, @Param("orgId") String orgId);

    /**
     * 查询关注时间匹配的用户id
     * @param actionType
     * @param minValue
     * @param maxValue
     * @param orgId
     * @return
     */
    List<String> listCustomerIdByTypeAndTime(@Param("actionType") Integer actionType, @Param("minValue") Date minValue,
                                             @Param("maxValue") Date maxValue, @Param("orgId") String orgId);

    /**
     * 查询性别/地区匹配的用户id 任意满足
     * @param gender
     * @param area
     * @param orgId
     * @return
     */
    List<String> listCustomerIdOrCustomerAttributes(@Param("gender") Integer gender, 
                                                    @Param("area") String area, @Param("orgId") String orgId,@Param("areaOther") String areaOther);

    /**
     * 查询性别/地区次数匹配的用户id 同时满足
     * @param gender
     * @param area
     * @param orgId
     * @return
     */
    List<String> listCustomerIdAndCustomerAttributes(@Param("gender") Integer gender,
                                                     @Param("area") String area, @Param("orgId") String orgId,@Param("areaOther") String areaOther);

    /**
     * 保存自动标签
     * @param goals
     * @param labelId
     * @return
     */
    Integer insertCustomerLabelsBatch(@Param("goals") Set<String> goals, @Param("labelId") String labelId);

    List<Label> AutolistLabels();

    List<String> listCustomerIdByTime(@Param("minValue") Date minValue,
                                      @Param("maxValue") Date maxValue, @Param("orgId") String orgId);

    List<String> listCustomerIdByTyp0(@Param("actionType") Integer actionType, @Param("orgId") String orgId);

}
